;////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
;//                                                                                                                            //
;//                                                         WNProject                                                          //
;//                                                                                                                            //
;//            This file is distributed under the BSD 2-Clause open source license. See License.txt for details.               //
;//                                                                                                                            //
;////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

.CODE

IF @Version LT 1000
    xgetbv MACRO
        DB 00Fh
        DB 001h
        DB 0D0h
    ENDM

    WNCPUIDEX PROC FRAME
        ; Load function type and ecx value
        mov eax, DWORD PTR [rdx]
        mov ecx, DWORD PTR [r8]
        cpuid
        ; Load info array address and store values into info array
        mov  0[rcx], eax
        mov  4[rcx], ebx
        mov  8[rcx], ecx
        mov 12[rcx], edx
        ret
       .ENDPROLOG
    WNCPUIDEX ENDP
ENDIF

WNXGETBV PROC FRAME
    mov ecx, DWORD PTR [rcx]
    xgetbv
    mov rax, QWORD PTR [edx]
    shl rax, 32
    or rax, QWORD PTR [eax]
    ret
   .ENDPROLOG
WNXGETBV ENDP

END